<?php
include_once 'models/task/task_category.php';
/**
 * Хендлер добавления/изменения категорий задач
 **/ 
class TaskCategoryEditHandler extends WallrideHandler{

  protected
    $companyObj = false,
    $action = null,
    $uuid = null,
    $name = null,
    $label = null,
    $price = null,
    $report = null;

  public function setParams($params){
    if (isset($params['companyObj']) && !empty($params['companyObj'])) $this->companyObj = $params['companyObj'];
    // из пост-запроса
    if (isset($params['action']) && !empty($params['action'])) $this->action = $params['action'];
    if (isset($params['uuid']) && !empty($params['uuid'])) $this->uuid = $params['uuid'];
    if (isset($params['name']) && !empty($params['name'])) $this->name = $params['name'];
    if (isset($params['label']) && !empty($params['label'])) $this->label = $params['label'];
    if ( isset($params['price']) ) $this->price = $params['price'];
    if (isset($params['report']) && !empty($params['report'])) $this->report = (bool)$params['report'];
  }

  public function process() {
    // выбираем необходимое действие
    switch( $this->action ) {
      // удаление
      /**
       * @todo при удалении категории задач добавить проверку на наличие задач в ней
       */
      case 'delete': {
        // достаем категорию из БД
        $taskCategory = TaskCategoryModel::getByID($this->uuid);
        // удаляем категорию
        $result = $taskCategory->delete();
        if( $result ) {
          return 'Категория задач успешно удалена';
        } else {
          return false;
        }
      } break;
      // добалвение
      case 'add': {
        $result = true;
        // проверяем длину названия
        if( strlen($this->name) < 2 ) {
          WallrideError::add('addTaskCategoryError', 'Описание слишком короткое', 'TaskCategoryEditHandler');
          $result = false;
        }
        // проверяем длину ярлыка
        if( empty($this->label) ) {
          WallrideError::add('addTaskCategoryError', 'Метка слишком короткая', 'TaskCategoryEditHandler');
          $result = false;
        }
        // проверяем цену (не может быть отрицательной)
        if( !is_numeric($this->price) || $this->price < 0 ) {
          WallrideError::add('addTaskCategoryError', 'Цена должна быть числом больше либо равным 0', 'TaskCategoryEditHandler');
          $result = false;
        }

        // в порядке ли данные?
        if( $result ) {
          // запоняем массив данными
          $data = array(
            'task_category_id' => '',
            'company_id' => $this->companyObj->data['company_id'],
            'task_category_name' => $this->name,
            'category_label' => $this->label,
            'price_value' => (int)$this->price,
            'is_reportable' => (bool)$this->report,
          );
          // создаем запись в БД
          $taskCategory = TaskCategoryModel::create($data);
          // проверяем результат
          if( $taskCategory ) {
            return 'Категория задач успешно добавлена';
          } else {
            return false;
          }
        } else {
          return false;
        }
      } break;
      // редактирование
      case 'edit': {
        $result = true;
        // дергаем модель категории задач из базы
        $taskCategory = TaskCategoryModel::getByID( $this->uuid );
        if( $taskCategory==false ) {
          WallrideError::add('editTaskCategoryError', 'Категория задач не выбрана', 'TaskCategoryEditHandler');
          $result = false;
        }
        // проверяем длину названия
        if( strlen($this->name) < 2 ) {
          WallrideError::add('editTaskCategoryError', 'Описание слишком короткое', 'TaskCategoryEditHandler');
          $result = false;
        }
        // проверяем длину ярлыка
        if( empty($this->label) ) {
          WallrideError::add('editTaskCategoryError', 'Метка слишком короткая', 'TaskCategoryEditHandler');
          $result = false;
        }
        // проверяем цену (не может быть отрицательной)
        if( !is_numeric($this->price) || $this->price < 0 ) {
          WallrideError::add('editTaskCategoryError', 'Цена должна быть числом больше либо равным 0', 'TaskCategoryEditHandler');
          $result = false;
        }
        // проверяем результат обработки полей
        if( $result ) {
          // заполняем поля новыми знаениями
          $taskCategory->data['task_category_name'] = $this->name;
          $taskCategory->data['category_label'] = $this->label;
          $taskCategory->data['price_value'] = $this->price;
          $taskCategory->data['is_reportable'] = $this->report;
          // сохраняем категорию задач
          $result = $taskCategory->save();
          if( $result ) {
            return 'Категория задач успешно обновлена';
          } else {
            Logger::error('save task category failed!'.var_export($this, true).var_export($taskCategory, true));
            return false;
          }
        } else {
          return false;
        }
      } break;
      default: {
        return false;
      } break;
    }
  }
}
?>
